<?php

require_once '..' . DS . '/DAO/Conexao.php';
require_once 'BeanMembro.php';
require_once 'BeanCidade.php';
require_once 'BeanEstado.php';
require_once 'BeanTipoUsuario.php';
require_once 'BeanSexo.php';
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of ModelMembro
 *
 * @author David
 */
class ModelMembro {

    public $p = null;

    public function ModelMembro() {
        $this->p = Conexao::Intancia()->Db();
    }

    // GETS
    public function getAutentica($cpf, $senha) {
//        $sql = "SELECT mem_id, 
//                    (SELECT count(*) 
//                        FROM membro WHERE mem_cpf = ? AND mem_senha = ?  
//                     ) as senha,
//                            mem_ativo, mem_nome, fk_tusu_id
//                FROM membro
//                WHERE mem_cpf = ?;";
        $sql = "SELECT mem_id, 
                    (SELECT CASE WHEN mem_senha is null THEN '' ELSE count(*) END senha
                        FROM membro WHERE mem_cpf = ? AND mem_senha = ?  
                     ) as senha,
                            mem_ativo, mem_nome, fk_tusu_id
                FROM membro
                WHERE mem_cpf = ?;";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(1, $cpf, PDO::PARAM_STR);
        $stmt->bindValue(2, $senha, PDO::PARAM_STR);
        $stmt->bindValue(3, $cpf, PDO::PARAM_STR);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        } else {
            while ($linha = $stmt->fetch()) {
                $beanMembro = new BeanMembro();
                $beanMembro->codigo = $linha["mem_id"];
                $beanMembro->nome = $linha["mem_nome"];
                $beanMembro->ativo = $linha["mem_ativo"];
                $beanMembro->senha = $linha["senha"];
                $beanMembro->tipo = $linha["fk_tusu_id"];
                $resultado = $beanMembro;
            }
        }
        return $resultado;
    }

    public function getMembros($codigo, $tipo) {
        $sql = "SELECT 
                    a.mem_id,
                    a.mem_nome,
                    a.mem_cpf,
                    a.mem_endereco,
                    a.mem_bairro,
                    a.mem_email,
                    date_format(a.mem_nascimento, '%d/%m/%Y') mem_nascimento,
                    a.mem_ativo,
                    date_format(a.mem_cadastrado, '%d/%m/%Y %H:%i') mem_cadastrado,
                    b.cid_id,
                    b.cid_descricao,
                    c.est_id,
                    c.est_descricao,
                    c.est_sigla,
                    d.tusu_id,
                    d.tusu_descricao,
                    e.sex_id,
                    e.sex_descricao
                FROM membro a
                INNER JOIN cidade b ON a.fk_cid_id = b.cid_id
                INNER JOIN estado c ON b.fk_est_id = c.est_id
                INNER JOIN tipo_usuario d ON a.fk_tusu_id = d.tusu_id
                INNER JOIN sexo e ON a.fk_sex_id = e.sex_id";


        // utiliza na busca por codigo
        if ($codigo != "") {
            
            // altera a busca por cpf
            $campo = "id";
            if ($tipo != "") {
                $campo = $tipo;
            }
            $sql .= " WHERE a.mem_".$campo." = :codigo";
        }
        
        if($tipo == "inactive"){
            $sql .= " WHERE mem_ativo = 0";
        }

        $sql .= " ORDER BY a.mem_ativo ASC, a.mem_nome;";

        $stmt = $this->p->prepare($sql);

        // utiliza na busca por codigo
        if ($codigo != "") {
            $stmt->bindValue(':codigo', $codigo, PDO::PARAM_STR);
        }
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        } else {
            while ($linha = $stmt->fetch()) {
                $beanMembro = new BeanMembro();
                $beanMembro->codigo = $linha["mem_id"];
                $beanMembro->nome = $linha["mem_nome"];
                $beanMembro->cpf = $this->addCaracter($linha["mem_cpf"]);
                $beanMembro->endereco = $linha["mem_endereco"];
                $beanMembro->bairro = $linha["mem_bairro"];
                $beanMembro->email = $linha["mem_email"];
                $beanMembro->nascimento = $linha["mem_nascimento"];
                $beanMembro->cadastrado = $linha["mem_cadastrado"];

                // instancia tipo usuario para inserir a tipo do usuário do membro
                $beanTipoUsuario = new BeanTipoUsuario();
                $beanTipoUsuario->codigo = $linha["tusu_id"];
                $beanTipoUsuario->descricao = $linha["tusu_descricao"];

                $beanMembro->tipo = $beanTipoUsuario;
                $beanMembro->ativo = $linha["mem_ativo"];

                // instancia cidade para inserir a cidade do membro
                $beanCidade = new BeanCidade();
                $beanCidade->codigo = $linha["cid_id"];
                $beanCidade->cidade = $linha["cid_descricao"];

                // instancia estado para inserir dentro da cidade
                $beanEstado = new BeanEstado();
                $beanEstado->codigo = $linha["est_id"];
                $beanEstado->estado = $linha["est_descricao"];
                $beanEstado->sigla = $linha["est_sigla"];

                $beanSexo = new BeanSexo();
                $beanSexo->codigo = $linha["sex_id"];
                $beanSexo->sexo = $linha["sex_descricao"];

                $beanMembro->beanSexo = $beanSexo;

                $beanCidade->beanEstado = $beanEstado;

                $beanMembro->beanCidade = $beanCidade;

                $resultado[] = $beanMembro;
            }
        }
        return $resultado;
    }

    public function getVerificaCPF($cpf) {
        $sql = "SELECT mem_id, mem_cpf FROM membro WHERE mem_cpf = :cpf;";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(':cpf', $cpf, PDO::PARAM_STR);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        } else {
            while ($linha = $stmt->fetch()) {
                $beanMembro = new BeanMembro();
                $beanMembro->codigo = $linha["mem_id"];
                $beanMembro->cpf = $linha["mem_cpf"];
                $resultado = $beanMembro;
            }
        }
        return $resultado;
    }

    public function getSenhaCriptograda($senha) {
        $codificacao_sha512 = hash('sha512', $senha);
        return $codificacao_sha512;
    }

    public function getSenhaCriptogradaMini($senha) {
        $codificada = md5($senha . "sisdof12345");
        return $codificada;
    }

    public function autentica($beanMembro) {
        $_SESSION["sis_id"] = $beanMembro->codigo;
        $_SESSION["sis_nome"] = $beanMembro->nome;
        $_SESSION["sis_tipo"] = $beanMembro->tipo;
        return null;
    }

    public function getNumeros() {
        $sql = "SELECT  SUM(ent_valor) as valor, 'entrada' FROM entrada
                WHERE MONTH(ent_data) = MONTH(NOW()) AND YEAR(ent_data) = YEAR(NOW())
                    UNION ALL
                  SELECT  SUM(sai_valor) as valor, 'saida' FROM saida
                WHERE MONTH(sai_data) = MONTH(NOW()) AND YEAR(sai_data) = YEAR(NOW())
                    UNION ALL
                SELECT  SUM(ent_valor) as valor, 'dizimo' FROM entrada
                WHERE MONTH(ent_data) = MONTH(NOW()) AND YEAR(ent_data) = YEAR(NOW()) AND fk_tent_id = 1
                    UNION ALL
                SELECT  SUM(ent_valor) as valor, 'oferta' FROM entrada
                WHERE MONTH(ent_data) = MONTH(NOW()) AND YEAR(ent_data) = YEAR(NOW()) AND fk_tent_id = 2
                    UNION ALL
                SELECT  SUM(ent_valor) as valor, 'outros' FROM entrada
                WHERE MONTH(ent_data) = MONTH(NOW()) AND YEAR(ent_data) = YEAR(NOW()) AND fk_tent_id NOT IN(1,2)
                    UNION ALL
                SELECT  
                    (SELECT sum(ent_valor) FROM entrada) - (SELECT sum(sai_valor) FROM saida) as saldo, 'saldo'";

        $stmt = $this->p->prepare($sql);
        $res = $stmt->execute();
        $resultado = [];
        if ($res != 1) {
            $resultado = "erro";
        }

        while ($linha = $stmt->fetch()) {
            $resultado[] = $linha["valor"];
        }
        return $resultado;
    }
    
    public function getInativos(){
        $sql = "SELECT count(*) as qtde FROM membro WHERE mem_ativo = 0;";
        
                $stmt = $this->p->prepare($sql);
        $res = $stmt->execute();

        $resultado = 0;
        if ($res != 1) {
            $resultado = "erro";
        }else{
            while($linha = $stmt->fetch()){
                $resultado = $linha["qtde"];
            }
        }
        return $resultado;
    }

    // SETS

    public function setMembro($nome, $cpf, $endereco, $bairro, $cidade, $email, $senha, $nascimento, $sexo) {

        $sql = "INSERT INTO membro(mem_nome, mem_cpf, mem_endereco, mem_bairro, fk_cid_id, mem_email, mem_senha, mem_nascimento, mem_ativo, fk_tusu_id, fk_sex_id, mem_cadastrado) 
                VALUES(:nome, :cpf, :endereco, :bairro, :cidade, :email, :senha, STR_TO_DATE(:nascimento,'%Y-%m-%d'), 0, 1, :sexo, now());";

        $cpf = $this->removeCaracter($cpf);
        $senha = $this->getSenhaCriptograda($senha);
        $nascimento = $this->data_EUA($nascimento);

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(':nome', $nome, PDO::PARAM_STR);
        $stmt->bindValue(':cpf', $cpf, PDO::PARAM_STR);
        $stmt->bindValue(':endereco', $endereco, PDO::PARAM_STR);
        $stmt->bindValue(':bairro', $bairro, PDO::PARAM_STR);
        $stmt->bindValue(':cidade', $cidade, PDO::PARAM_STR);
        $stmt->bindValue(':email', $email, PDO::PARAM_STR);
        $stmt->bindValue(':senha', $senha, PDO::PARAM_STR);
        $stmt->bindValue(':nascimento', $nascimento, PDO::PARAM_STR);
        $stmt->bindValue(':sexo', $sexo, PDO::PARAM_STR);
        $res = $stmt->execute();

        $resultado = array();

        if (!$res) {
            $resultado = "erro";
        }

        return $resultado;
    }

    public function setDeleteMembro($codigo) {
        $sql = "DELETE FROM membro WHERE mem_id = ?;";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(1, $codigo);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        }
        return $resultado;
    }

    public function setUpdateMembro($codigo, $nome, $cpf, $endereco, $bairro, $cidade, $nascimento, $sexo) {
        $sql = "UPDATE membro SET 
                    mem_nome = :nome,
                    mem_cpf = :cpf,
                    mem_endereco = :endereco,
                    mem_bairro = :bairro,
                    fk_cid_id = :cidade,
                    mem_nascimento = :nascimento,
                    fk_sex_id = :sexo
                  WHERE mem_id = :codigo;";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(':nome', $nome);
        $stmt->bindValue(':cpf', $cpf);
        $stmt->bindValue(':endereco', $endereco);
        $stmt->bindValue(':bairro', $bairro);
        $stmt->bindValue(':cidade', $cidade);
        $stmt->bindValue(':nascimento', $nascimento);
        $stmt->bindValue(':sexo', $sexo);
        $stmt->bindValue(':codigo', $codigo);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        }
        return $resultado;
    }

    public function setAtivaDesativa($codigo, $status) {
        $sql = "UPDATE membro
                    SET mem_ativo = ?
                 WHERE mem_id = ?;";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(1, $status);
        $stmt->bindValue(2, $codigo);
        $res = $stmt->execute();

        $resultado = null;
        if ($res != 1) {
            $resultado = "erro";
        }
        return $resultado;
    }

    public function setEmailValido($codigo){
        $sql = "UPDATE membro SET mem_email_valido = 1
                WHERE mem_id = ?;";
        
        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(1, $codigo);
        $res = $stmt->execute();

        $resultado = null;
        if ($res != 1) {
            $resultado = "erro";
        }
        return $resultado;
    }
    
    /**
     * Remove caracacteres especiais do CPF
     * @param string $cpf
     * @return string
     */
    public function removeCaracter($cpf) {
        // Retira os pontos
        $explode = explode(".", $cpf);
        $novoCPF = $explode[0] . $explode[1] . $explode[2];

        // Retira o traço
        $explode = explode("-", $novoCPF);
        $novoCPF = $explode[0] . $explode[1];
        return $novoCPF;
    }
    
    public function addCaracter($cpf) {
        $novoCpf = $cpf[0];
        $novoCpf .= $cpf[1];
        $novoCpf .= $cpf[2].".";
        $novoCpf .= $cpf[3];
        $novoCpf .= $cpf[4];
        $novoCpf .= $cpf[5].".";
        $novoCpf .= $cpf[6];
        $novoCpf .= $cpf[7];
        $novoCpf .= $cpf[8]."-";
        $novoCpf .= $cpf[9];
        $novoCpf .= $cpf[10];
        
        return $novoCpf;
    }

    function data_EUA($data) {
        $desmonta = explode("/", $data);
        $dia = $desmonta[0];
        $mes = $desmonta[1];
        $ano = $desmonta[2];

        return $ano . "-" . $mes . "-" . $dia;
    }

}